#ifndef _SYS_WAIT_H
#define _SYS_WAIT_H

#include <sys/types.h>

#define _LOW(v)		( (v) & 0377)
#define _HIGH(v)	( ((v) >> 8) & 0377)

/* options for waitpid, WUNTRACED not supported */
// options默认的行为是：挂起调用进程，直到有子进程终止。
// WNOHANG:挂起调用进程的执行，即使等待集合中的任何子进程都还没有终止，那么就立即返回（返回值为0），不予以等待.
// WUNTRACED:挂起调用进程的执行，直到等待集合中的一个进程变成终止或者被停止。返回的PID是等待导致waipid返回的子进程的PID.但我们想要检查已终止或者被停止的子进程时，可以用这个选项。
// WCONTINUED:挂起调用进程的执行，直到等待集合中一个正在运行的进程终止或等待集合中一个被停止的进程收到SIGCONT信号重新开始执行。
#define WNOHANG		1 /* wait-nohang：不等待直接返回，表示如果没有子进程退出或终止就马上返回 */
#define WUNTRACED	2 /* wait-untraced：表示如果子进程是停止的，也马上返回（无须跟踪）*/

#define WIFEXITED(s)	(!((s)&0xFF)
#define WIFSTOPPED(s)	(((s)&0xFF)==0x7F)
#define WEXITSTATUS(s)	(((s)>>8)&0xFF)
#define WTERMSIG(s)	((s)&0x7F)
#define WSTOPSIG(s)	(((s)>>8)&0xFF)
#define WIFSIGNALED(s)	(((unsigned int)(s)-1 & 0xFFFF) < 0xFF)

pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid, int *stat_loc, int options);

#endif
